const { formatXml } = require('../utils/format')
const messageController = require('./message')
const {
  findUser,
  createUser,
  getBalance,
  changeModel,
  recharge
} = require('../model/user')
async function switchController(req, res, next) {
  const reqBody = formatXml(req.body.xml)
  const { fromusername } = reqBody
  switch (reqBody.msgtype) {
    // 收取用户返送过来的语音信息
    case 'voice':
    //接收来自输入框的消息
    case 'text':
      messageController(req, res)
      break;

    //接收来自菜单的消息
    case 'event':
      // 创建当前的时间戳
      const createTime = new Date().getTime()

      // 处理用户菜单模式切换的动作
      switch (reqBody.eventkey) {
        //人工模式
        case 'model_human':
          //在数据库中切换为人工模式
          await changeModel(fromusername, 'human')
          res.render('reply', {
            ...reqBody,
            createTime,
            content: '您现在已经切换到人工服务，请等待坐席消息...'
          })
          break
        //ChatGPT模式
        case 'model_chatgpt':
          //在数据库中切换为chatgpt模式
          await changeModel(fromusername, 'chatgpt')
          res.render('reply', {
            ...reqBody,
            createTime,
            content: '您现在已经切换到ChatGPT服务，请等待坐席消息...'
          })
          break
        //查询模式
        case 'model_search':
          const { model } = await findUser(fromusername)
          res.render('reply', {
            ...reqBody,
            createTime,
            content: `您现在会话模式是：${model} ☕️`
          })
          break
        //账户充值
        case 'balance_recharge':
          //微信支付，获取账户金额
          const amount = 8
          await recharge(fromusername, amount)
          const newBalance = await getBalance(fromusername)
          res.render('reply', {
            ...reqBody,
            createTime,
            content: `充值成功，您的账户余额为：${newBalance}`
          })
          break
        //余额查询
        case 'balance_search':
          const balance = await getBalance(fromusername)
          res.render('reply', {
            ...reqBody,
            createTime,
            content: `您的账户余额为：${balance}`
          })
          break
        default:
          break
      }

      // 处理用户关注和取消关注的动作
      switch (reqBody.event) {
        //订阅
        case 'subscribe':
          // 当用户关注公众号的时候，需要到数据库查一下此用户是否存在
          const result = await findUser(fromusername)
          // 如果用户存在，只需要返回用户账号的余额
          if (result) {
            const balance = await getBalance(fromusername)
            res.render('reply', {
              ...reqBody,
              createTime,
              content: `欢迎回来，您的账户余额为 ${balance}，会话模式是：${result.model === 'chatgpt' ? 'ChatGPT' : '人工'} ☕️`
            })
          }
          // 如果用户不存在，创建一个用户信息，并赠送 5 个金币
          else {
            const userInfo = await createUser(fromusername)
            res.render('reply', {
              ...reqBody,
              createTime,
              content: `感谢您的关注，为您奉上 ${userInfo[0].balance} 个金币，会话模式是：${result.model === 'chatgpt' ? 'ChatGPT' : '人工'}☺`
            })
          }
          break
        //取关
        case 'unsubscribe':
          break
      }
    default:
      break;
  }
}

module.exports = switchController